package util;

import java.util.ArrayList;
import java.util.List;

import model.Acquisto;
import model.ElementoBase;
import model.Escursione;
import model.Hotel;
import model.PacchettoPersonale;
import model.PacchettoPredefinito;
import model.Utente;
import model.Volo;
import dto.AcquistoDTO;
import dto.ElementoBaseDTO;
import dto.EscursioneDTO;
import dto.GruppoDTO;
import dto.HotelDTO;
import dto.PacchettoPersonaleDTO;
import dto.PacchettoPredefinitoDTO;
import dto.UtenteDTO;
import dto.VoloDTO;

public class Converter {
	
	public static AcquistoDTO convertToDTO(Acquisto a){
		AcquistoDTO dto = new AcquistoDTO();
		dto.setData(a.getData());
		dto.setDescrizione(a.getDescrizione());
		dto.setEmailUtente(a.getEmailUtente());
		dto.setIdAcquisto(a.getIdAcquisto());
		dto.setNome(a.getNome());
		dto.setOra(dto.getOra());
		dto.setTotale(a.getTotale());
		return dto;
	}
	
	public static VoloDTO convertToDTO(Volo v){
		VoloDTO dto = new VoloDTO();
		dto.setCittàArrivo(v.getCittàArrivo());
		dto.setCittàPartenza(v.getCittàPartenza());
		dto.setCompagnia(v.getCompagnia());
		dto.setIdElementoBase(v.getIdElementoBase());
		dto.setNumVolo(v.getNumVolo());
		dto.setElemento(Converter.convertToDTO(v.getElemento()));
		return dto;
	}
	
	public static HotelDTO convertToDTO(Hotel h){
		HotelDTO dto = new HotelDTO();
		dto.setCittà(h.getCittà());
		dto.setDescrizione(h.getDescrizione());
		dto.setIdElementoBase(h.getIdElementoBase());
		dto.setIndirizzo(h.getIndirizzo());
		dto.setNumTelefono(h.getNumTelefono());
		dto.setElemento(Converter.convertToDTO(h.getElemento()));
		return dto;
	}
	
	public static EscursioneDTO convertToDTO(Escursione e){
		EscursioneDTO dto = new EscursioneDTO();
		dto.setCittà(e.getCittà());
		dto.setIdElementoBase(e.getIdElementoBase());
		dto.setOraFine(e.getOraFine());
		dto.setTipo(e.getTipo());
		dto.setElemento(Converter.convertToDTO(e.getElemento()));
		return dto;
	}
	
	public static ElementoBaseDTO convertToDTO(ElementoBase elem) {
	    	ElementoBaseDTO DTO = new ElementoBaseDTO();
	    	DTO.setIdElementoBase(elem.getIdElementoBase());
	    	DTO.setNome(elem.getNome());
	    	DTO.setData(elem.getData());
	    	DTO.setPrezzo(elem.getPrezzo());
	    	DTO.setOra(elem.getOra());
	    	DTO.setTipo(elem.getTipo());
	    	return DTO;
	}
	   
    public static PacchettoPersonaleDTO convertToDTO(PacchettoPersonale pack) {
    	PacchettoPersonaleDTO DTO = new PacchettoPersonaleDTO();
    	DTO.setIdPacchettoPersonale(pack.getIdPacchettoPersonale());
    	DTO.setNome(pack.getNome());
    	DTO.setData(pack.getDataCreazione());
    	DTO.setTotale(pack.getTotale());
    	DTO.setRandomcode(pack.getRandomcode());
    	
    	List<ElementoBaseDTO> elist = new ArrayList<ElementoBaseDTO>();
    	for(ElementoBase elem : pack.getElementi()){
    		elist.add(convertToDTO(elem));
    	}
    	DTO.setElementi(elist);
		return DTO;
	}
    
    public static PacchettoPredefinitoDTO convertToDTO(PacchettoPredefinito pack) {
    	PacchettoPredefinitoDTO DTO = new PacchettoPredefinitoDTO();
    	DTO.setIdPacchettoPredefinito(pack.getIdPacchettoPredefinito());
    	DTO.setNome(pack.getNome());
    	DTO.setData(pack.getDataCreazione());
    	DTO.setTotale(pack.getTotale());
    	DTO.setApprovato(pack.isApprovato());
    	List<ElementoBaseDTO> elist = new ArrayList<ElementoBaseDTO>();
    	for(ElementoBase elem : pack.getElementi()){
    		elist.add(convertToDTO(elem));
    	}
    	DTO.setElementi(elist);
		return DTO;
	}
    
    public static List<ElementoBaseDTO> convertElementiToDTO(List<ElementoBase> list){
    	List<ElementoBaseDTO> elist = new ArrayList<ElementoBaseDTO>();
    	for(ElementoBase elem : list){
    		elist.add(convertToDTO(elem));
    	}
    	return elist;
    }
    
    public static List<VoloDTO> convertVoliToDTO(List<Volo> list){
    	List<VoloDTO> elist = new ArrayList<VoloDTO>();
    	for(Volo elem : list){
    		elist.add(convertToDTO(elem));
    	}
    	return elist;
    }
    
    public static List<HotelDTO> convertHotelToDTO(List<Hotel> list){
    	List<HotelDTO> elist = new ArrayList<HotelDTO>();
    	for(Hotel elem : list){
    		elist.add(convertToDTO(elem));
    	}
    	return elist;
    }
    
    public static List<EscursioneDTO> convertEscursioniToDTO(List<Escursione> list){
    	List<EscursioneDTO> elist = new ArrayList<EscursioneDTO>();
    	for(Escursione elem : list){
    		elist.add(convertToDTO(elem));
    	}
    	return elist;
    } 
    
    public static List<Acquisto> convertAcquistiFromDTO(List<AcquistoDTO> list){
    	List<Acquisto> newList = new ArrayList<Acquisto>();
    	for(AcquistoDTO pack: list){
    		newList.add(new Acquisto(pack));
    	}
    	return newList;
    }
    
    public static List<AcquistoDTO> convertAcquistiToDTO(List<Acquisto> list){
    	List<AcquistoDTO> newList = new ArrayList<AcquistoDTO>();
    	for(Acquisto pack: list){
    		newList.add(Converter.convertToDTO(pack));
    	}
    	return newList;
    }
    
    public static List<PacchettoPersonaleDTO> convertToDTO(List<PacchettoPersonale> list){
    	List<PacchettoPersonaleDTO> newList = new ArrayList<PacchettoPersonaleDTO>();
    	for(PacchettoPersonale pack: list){
    		newList.add(convertToDTO(pack));
    	}
    	return newList;
    }
    
    public static List<PacchettoPredefinitoDTO> convertPredToDTO(List<PacchettoPredefinito> list){
    	List<PacchettoPredefinitoDTO> newList = new ArrayList<PacchettoPredefinitoDTO>();
    	for(PacchettoPredefinito pack: list){
    		newList.add(convertToDTO(pack));
    	}
    	return newList;
    }
    
    public static UtenteDTO convertToDTO(Utente Utente) {
		UtenteDTO UtenteDTO = new UtenteDTO();
		UtenteDTO.setEmail(Utente.getEmail());
		UtenteDTO.setNome(Utente.getNome());
		UtenteDTO.setCognome(Utente.getCognome());
		UtenteDTO.setCittà(Utente.getCittà());
		UtenteDTO.setConfermato(Utente.getConfermato());
		UtenteDTO.setData(Utente.getData());
		UtenteDTO.setIndirizzo(Utente.getIndirizzo());
		UtenteDTO.setLuogoNascita(Utente.getLuogoNascita());
		UtenteDTO.setTelefono(Utente.getTelefono());
		UtenteDTO.setPassword(Utente.getPassword());
		UtenteDTO.setPacchettiPersonali(convertToDTO(Utente.getPacchettiPersonali()));
		UtenteDTO.setPacchettiPredefiniti(convertPredToDTO(Utente.getPacchettiPredefiniti()));
		UtenteDTO.setGiftList(Converter.convertElementiToDTO(Utente.getGiftList()));
		UtenteDTO.setAcquisto(Converter.convertAcquistiToDTO(Utente.getAcquisto()));
		ArrayList<GruppoDTO> g = new ArrayList<GruppoDTO>();
		if(Utente.getGruppi().get(0).name()=="Utenti")
			g.add(GruppoDTO.Utenti);
		else if (Utente.getGruppi().get(0).name()=="Impiegati")
			g.add(GruppoDTO.Impiegati);
		else g.add(GruppoDTO.Pending);
		UtenteDTO.setGruppi(g);
		return UtenteDTO;
	}
    
    public static ElementoBase convertFromDTO(ElementoBaseDTO element){
    	return new ElementoBase(element);
    }
    
    public static List<ElementoBase> convertElementiFromDTO(List<ElementoBaseDTO> listDTO){
		List<ElementoBase> list = new ArrayList<ElementoBase>();
		for(ElementoBaseDTO eb : listDTO){
			list.add(new ElementoBase(eb));
		}
		return list;
    }
    
    public static List<PacchettoPersonale> convertPacchettiFromDTO(List<PacchettoPersonaleDTO> listDTO){
		List<PacchettoPersonale> list = new ArrayList<PacchettoPersonale>();
		for(PacchettoPersonaleDTO eb : listDTO){
			list.add(new PacchettoPersonale(eb));
		}
		return list;
    }
    
    public static List<PacchettoPredefinito> convertPacchettiPredFromDTO(List<PacchettoPredefinitoDTO> listDTO){
		List<PacchettoPredefinito> list = new ArrayList<PacchettoPredefinito>();
		for(PacchettoPredefinitoDTO eb : listDTO){
			list.add(new PacchettoPredefinito(eb));
		}
		return list;
    }
}
